• 1995 年 5 月 23 日,Sun 公司正式发布了 Java 语言和 HotJava 浏览器;
  • 1996 年 1 月,Sun 公司发布了 Java 的第一个开发工具包(JDK 1.0);
  • 1996 年 4 月,10 个最主要的操作系统供应商申明将在其产品中嵌入 Java 技术,发展可真是迅雷不及掩耳;
  • 1996 年 9 月,大约 8.3 万个网页应用了 Java 技术来制作,这就是早年的互联网,即 Java Applet,真香定律;
  • 1996 年 10 月,Sun 公司发布了 Java 平台第一个即时编译器(JIT),这一年很不平凡;
  • 1997 年 2 月 18 日,JDK 1.1 面世,在随后的三周时间里,达到了 22 万次的下载量,PHP 甘拜下风;
  • 1999 年 6 月,Sun 公司发布了第二代 Java 三大版本,即 J2SE、J2ME、J2EE,随之 Java2 版本发布;
  • 2000 年 5 月 8 日,JDK 1.3 发布,四年升三版,不算过分哈;
  • 2000 年 5 月 29 日,JDK 1.4 发布,获得 Apple 公司 Mac OS 的工业标准支持;
  • 2001 年 9 月 24 日,Java EE 1.3 发布,注意是 EE,从此开始臃肿无比;
  • 2002 年 2 月 26 日,J2SE 1.4 发布,自此 Java 的计算能力有了大幅度的提升,与 J2SE 1.3 相比,多了近 62% 的类与接口;
  • 2004 年 9 月 30 日 18:00PM,J2SE 1.5 发布,1.5 正式更名为 Java SE 5.0;
  • 2005 年 6 月,在 JavaOne 大会上,Sun 公司发布了 Java SE 6;
  • 2009 年 4 月 20 日,Oracle 宣布收购 Sun,该交易的总价值约为 74 亿美元;
  • 2010 年 Java 编程语言的创始人 James Gosling 从 Oracle 公司辞职,一朝天子一朝臣,国外也不例外;
  • 2011 年 7 月 28 日,Oracle 公司终于发布了 Java 7,这次版本升级经过了将近 5 年时间;
  • 2014 年 3 月 18 日,Oracle 公司发布了 Java 8,这次版本升级为 Java 带来了全新的 Lambda 表达式。

# Java 7

Java 7 增加了以下新特性;

  • try、catch 能够捕获多个异常
  • 新增 try-with-resources 语法
  • JSR341 脚本语言新规范
  • JSR203 更多的 NIO 相关函数
  • JSR292,课程中提到的 InvokeDynamic
  • 支持 JDBC 4.1 规范  文件操作的 Path 接口、DirectoryStream、Files、WatchService
  • jcmd 命令
  • 多线程 fork/join 框架
  • Java Mission Control

# Java 8

Java 8 是一个重要的版本,在语法层面上有更大的改动,支持 Lamda 表达式,影响堪比 Java 5 的泛型支持:

  • 支持 Lamda 表达式
  • 支持集合的 stream 操作  提升了 HashMaps 的性能(红黑树)
  • 提供了一系列线程安全的日期处理类
  • 完全去掉了 Perm 区

# Java 9

Java 9 增加了以下新特性:

  • JSR376 Java 平台模块系统
  • JEP261 模块系统
  • jlink 精简 JDK 大小
  • G1 成为默认垃圾回收器
  • CMS 垃圾回收器进入废弃倒计时
  • GC Log 参数完全改变,且不兼容
  • JEP110 支持 HTTP2,同时改进 HttpClient 的 API,支持异步模式
  • jshell 支持类似于 Python 的交互式模式

# Java 10

Java 10 增加了以下新特性:

  • JEP304 垃圾回收器接口代码进行整改
  • JEP307 G1 在 FullGC 时采用并行收集方式
  • JEP313 移除 javah 命令
  • JEP317 重磅 JIT 编译器 Graal 进入实验阶段

# Java 11

Java 11 增加了以下新特性:

  • JEP318 引入了 Epsilon 垃圾回收器(这个回收器什么都不干,适合短期任务)
  • JEP320 移除了 JavaEE 和 CORBA Modules,应该要走轻量级路线
  • Flight Recorder 功能,类似 JMC 工具里的功能
  • JEP321 内置 httpclient 功能,java.net.http 包
  • JEP323 允许 lambda 表达式使用 var 变量  废弃了 -XX+AggressiveOpts 选项
  • 引入了 ZGC,依然是实验性质

# Java 12

Java 12 增加了以下新特性:

  • JEP189 先加入 ShenandoahGC
  • JEP325 switch 可以使用表达式
  • JEP344 优化 G1 达成预定目标
  • 优化 ZGC

# Java 13

Java 13 增加了以下新特性:

  • JEP354 yield 替代 break
  • JEP355 加入了 Text Blocks,类似 Python 的多行文本
  • ZGC 的最大 heap 大小增大到 16TB
  • 废弃 rmic Tool 并准备移除

# Java 14

Java 14 增加了以下新特性:

  • JEP343 打包工具引入
  • JEP345 实现了 NUMA-aware 的内存分配,以提升 G1 在大型机器上的性能
  • JEP359 引入了 preview 版本的 record 类型,可用于替换 lombok 的部分功能
  • JEP364 之前的 ZGC 只能在 Linux 上使用,现在 Mac 和 Windows 上也能使用 ZGC 了
  • JEP363 正式移除 CMS,CMS 涉及到的一些优化参数,在 14 版本普及之后,将不复存在

# 总结

每一个版本的发布,Java 都会对以下进行改进:

  • 优化垃圾回收器,减少停顿,提高吞吐
  • 语言语法层面的升级
  • 结构调整,减少运行环境的大小,模块化
  • 废弃掉一些承诺要废弃的模块

Java 9 之后,已经进入了快速发布阶段,大约每半年发布一次,Java 8 和 Java 11 是目前支持的 LTS 版本(Long Term Support:长期演进版)